package com.ruoyi.cangku.service.impl;

import com.github.pagehelper.PageInfo;
import com.ruoyi.cangku.domain.Kucunguanli;
import com.ruoyi.cangku.domain.KucunguanliReturn;
import com.ruoyi.cangku.domain.Shangpinguanli;
import com.ruoyi.cangku.mapper.KucunguanliMapper;
import com.ruoyi.cangku.mapper.ShangpinguanliMapper;
import com.ruoyi.cangku.service.IKucunguanliService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.gongjulei;
import com.ruoyi.jinchuguanli.domain.Shangpin;
import com.ruoyi.tongji.domain.*;
import com.ruoyi.tongji.mapper.JieCunMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * kucunService业务层处理
 *
 * @author ruoyi
 * @date 2023-11-07
 */
@Service
public class KucunguanliServiceImpl implements IKucunguanliService {
    @Autowired
    private KucunguanliMapper kucunguanliMapper;

    @Autowired
    private ShangpinguanliMapper shangpinguanliMapper;

    @Autowired
    private JieCunMapper jieCunMapper;

    /**
     * 查询kucun
     *
     * @param id kucun主键
     * @return kucun
     */
    @Override
    public Kucunguanli selectKucunguanliById(Integer id) {
        return kucunguanliMapper.selectKucunguanliById(id);
    }

    /**
     * 查询kucun列表
     *
     * @param kucunguanli kucun
     * @return kucun
     */
    @Override
    public List<Kucunguanli> selectKucunguanliList(Kucunguanli kucunguanli) {
        return kucunguanliMapper.selectKucunguanliList(kucunguanli);
    }

    /**
     * 新增kucun
     *
     * @param kucunguanli kucun
     * @return 结果
     */
    @Override
    public int insertKucunguanli(Kucunguanli kucunguanli) {
        return kucunguanliMapper.insertKucunguanli(kucunguanli);
    }

    /**
     * 修改kucun
     *
     * @param kucunguanli kucun
     * @return 结果
     */
    @Override
    public int updateKucunguanli(Kucunguanli kucunguanli) {
        return kucunguanliMapper.updateKucunguanli(kucunguanli);
    }

    /**
     * 批量删除kucun
     *
     * @param ids 需要删除的kucun主键
     * @return 结果
     */
    @Override
    public int deleteKucunguanliByIds(String ids) {
        return kucunguanliMapper.deleteKucunguanliByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除kucun信息
     *
     * @param id kucun主键
     * @return 结果
     */
    @Override
    public int deleteKucunguanliById(Integer id) {
        return kucunguanliMapper.deleteKucunguanliById(id);
    }

    @Override
    public List<KucunguanliReturn> selectKucunguanliReturnList(Kucunguanli kucunguanli) {
        KucunguanliReturn kucunguanliReturn = new KucunguanliReturn();
        BeanUtils.copyProperties(kucunguanli,kucunguanliReturn,KucunguanliReturn.class);
        kucunguanliReturn.setShangpinming(kucunguanliReturn.getShangpinbianhao());
        kucunguanliReturn.setShangpinbianhao(null);
        return kucunguanliMapper.selectKucunguanliReturnList(kucunguanliReturn);
    }

    @Override
    public KucunguanliReturn selectKucunguanliReturnById(Integer id) {
        Kucunguanli kucunguanli = kucunguanliMapper.selectKucunguanliById(id);
        Shangpinguanli shangpinguanli = shangpinguanliMapper.selectShangpinguanliByBianHao(kucunguanli.getShangpinbianhao());
        KucunguanliReturn kucunguanliReturn = new KucunguanliReturn();
        BeanUtils.copyProperties(shangpinguanli, kucunguanliReturn);
        BeanUtils.copyProperties(kucunguanli, kucunguanliReturn);
        return kucunguanliReturn;
    }

    @Override
    public TableDataInfo selectKucunguanliReturnListNew(int pageNum, int pageSize, KucunguanliReturn kucunguanli) {
        PageInfo<KucunguanliReturn> guiGeSelectPageInfo = PageUtils.startPage(pageNum, pageSize)
                .doSelectPageInfo(() -> kucunguanliMapper.selectKucunguanliListGroup(kucunguanli));
        PageInfo<jieCunDan> jieCunDanPageInfo = new PageInfo<>();
        BeanUtils.copyProperties(guiGeSelectPageInfo, jieCunDanPageInfo);

        List<KucunguanliReturn> kucunguanliReturnList = guiGeSelectPageInfo.getList();
        List<jieCunDan> danList = new ArrayList<>();

        for (KucunguanliReturn kr:kucunguanliReturnList
             ) {
            jieCunDan jieCunDan = new jieCunDan();
            GuiGeSelect guiGeSelect = new GuiGeSelect();
            guiGeSelect.setShangpinguigekuan(kr.getShangpinguigekuan());
            guiGeSelect.setShangpinguigegao(kr.getShangpinguigegao());
            guiGeSelect.setShangpinkaixiang(kr.getShangpinkaixiang());
            guiGeSelect.setShangpinming(kucunguanli.getShangpinming());
            BeanUtils.copyProperties(guiGeSelect, jieCunDan);
            jieCunDan.setShangpinkucun(Math.toIntExact(kr.getShangpinshuliang()));
            List<Shangpin> jieCunShangPinList = kucunguanliMapper.selectShangPinList(guiGeSelect);
            List<JieCun> jieCunList = new ArrayList<>();
            for (Shangpin sp : jieCunShangPinList
            ) {
                JieCun jieCun = new JieCun();
                BeanUtils.copyProperties(sp, jieCun);
                jieCun.setKucunshuliang(Math.toIntExact(sp.getShangpinshuliang()));
                jieCunList.add(jieCun);
            }
            jieCunDan.setJieCunList(jieCunList);
            danList.add(jieCunDan);
        }

        jieCunDanPageInfo.setList(danList);

        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(0);
        rspData.setRows(danList);
        rspData.setTotal(jieCunDanPageInfo.getTotal());

        return rspData;
    }

    @Override
    public List<Shangpin> selectShangPinList() {
        return kucunguanliMapper.selectShangPinList(new GuiGeSelect());
    }
}
